1-1=0,000001

Otázka od: Koteles Jan

31. 10. 2003 13:23

Prosim Vas co mam robit ked podla delphi je int(21)=20? alebo frac(21)=1?
Alebo 24-24 je 2,146785456e-14?

Potrebuje desatinnu cast cisla previest ako cele cislo.
Povodne som mal konstrukciu:

While Frac(f)>0 then f:=f*10;

Niekedy to funguje, ale napr. pri cisle 0,21 mi to fungovalo takto
1. priechod f:=2,1 ... Frac(f) = 0,1
2. priechod f:=21 ... Frac(f) = 1 ???!!!!!.

Podla mojho skromneho nazoru by frac(21) malo byt 0, ale delphi5 ma zrejme
iny nazor.
Podobne to funguje aj pri 0,24

Da sa s tym nieco robit? Ci to mam prerobit cez String?

jk






----------
* www.inMail.sk - Vasa emailova adresa na cely zivot ZDARMA
* Mail neobsahuje virusy. Zkontrolovane antivirusom NOD32 (www.eset.sk)
* www.SlovakNET.sk - profesionalny webhosting, domena .SK ZADARMO
* Zoner Media Explorer 5 - stiahnite si pomocnika pre digitalnu fotografiu
(zme.zoner.sk)

Odpovedá: Slavomir Skopalik

31. 10. 2003 13:45

A jeke pouzivas datove typy ?
Zkousel jsem int(21) a vysledek je 21,
zkousel jsem frac(21) a vysledek je 0.
Nejsou to nahodou opsane hodnoty z debugeru, nebo jineho vypisu ?

> Prosim Vas co mam robit ked podla delphi je int(21)=20? alebo frac(21)=1?
> Alebo 24-24 je 2,146785456e-14?
>
> Potrebuje desatinnu cast cisla previest ako cele cislo.
> Povodne som mal konstrukciu:
>
> While Frac(f)>0 then f:=f*10;

Jenze to cislo po vynasebeni 100 NENI 21 !!
Proste pokud pouzivas flouty, tak si musis zvyknout na to, ze vyjadruji cisla
jen priblizne, to znamena, ze bud musis pouzit celociselnou matematiku, nebo
vhodne zaokroulovat napriklad takto:

 x:=frac(xxx);
 y:=int(xxx);
 if abs(x-1)>1e-8 then x:=0; y:=y+1;

De fakto tim rikas, ze pokud se bude x hodne blizit 1 (1e-8 je hodnota
priblizeni)
tak
jej muzeme povazovat za 1.

Dalsi moznosti je pouzit typ extended a vysledky pri textovych vystupech
NEZAOKROUHLOVAT.
jinak ti opet vznikne stejna situace.


>
> Niekedy to funguje, ale napr. pri cisle 0,21 mi to fungovalo takto
> 1. priechod f:=2,1 ... Frac(f) = 0,1
> 2. priechod f:=21 ... Frac(f) = 1 ???!!!!!.
>
> Podla mojho skromneho nazoru by frac(21) malo byt 0, ale delphi5 ma zrejme
> iny nazor.
> Podobne to funguje aj pri 0,24
>
> Da sa s tym nieco robit? Ci to mam prerobit cez String?

Pres string to nema smysl (pokud ovsem jen nepotrebujes nasobit 100).

 Slavek

PS: kazdy typ CPU pocita s FP jinak, tj. da jiny vysledek a to zejmena
pro oprace s delenim, logaritmy a jinymy transcendetnimy funkcemy.





----------
* www.inMail.sk - Vasa emailova adresa na cely zivot ZDARMA
* Mail neobsahuje virusy. Zkontrolovane antivirusom NOD32 (www.eset.sk)
* www.SlovakNET.sk - profesionalny webhosting, domena .SK ZADARMO
* Zoner Media Explorer 5 - stiahnite si pomocnika pre digitalnu fotografiu
(zme.zoner.sk)

Odpovedá: Koteles Jan

31. 10. 2003 14:53

> A jeke pouzivas datove typy ?

Real - potrebujem pracovat len s 0,01 presnostou, tak som myslel ze bude
stacit

> Zkousel jsem int(21) a vysledek je 21,
> zkousel jsem frac(21) a vysledek je 0.
> Nejsou to nahodou opsane hodnoty z debugeru, nebo jineho vypisu ?

Z debugeru (?) - teda z toho zlteho ramceku pri ladeni aplikacie  
 
> x:=frac(xxx);
> y:=int(xxx);
> if abs(x-1)>1e-8 then x:=0; y:=y+1;

Ano - toto je asi to riesenie ale....

> Pres string to nema smysl (pokud ovsem jen nepotrebujes nasobit 100).

Koli tej 100vkovej presnosti to spravim len cez ten string

Kazdopadne dakujem, bolo tam dost podnetnych informacii




----------
* www.inMail.sk - Vasa emailova adresa na cely zivot ZDARMA
* Mail neobsahuje virusy. Zkontrolovane antivirusom NOD32 (www.eset.sk)
* www.SlovakNET.sk - profesionalny webhosting, domena .SK ZADARMO
* Zoner Media Explorer 5 - stiahnite si pomocnika pre digitalnu fotografiu
(zme.zoner.sk)

Odpovedá: Jiri Virt

31. 10. 2003 14:46


> Real - potrebujem pracovat len s 0,01 presnostou, tak som myslel ze bude
stacit

to bych spis pouzil currency .. to si hraje na 4 des mista ....


Jirka





----------
* www.inMail.sk - Vasa emailova adresa na cely zivot ZDARMA
* Mail neobsahuje virusy. Zkontrolovane antivirusom NOD32 (www.eset.sk)
* www.SlovakNET.sk - profesionalny webhosting, domena .SK ZADARMO
* Zoner Media Explorer 5 - stiahnite si pomocnika pre digitalnu fotografiu
(zme.zoner.sk)

Odpovedá: Tomas Kminek

31. 10. 2003 14:29

> Prosim Vas co mam robit ked podla delphi je int(21)=20? alebo frac(21)=1?
>

U me (D5.01) to funguje docela normalne.
Asi ti nejaky kod (vetsinou v cizi DLL) zmenil FPU control word. Zkus v
archivu hledat 8087CW nebo SafeLoadLibrary. Default8087CW je standardne
$1332.

Tom





----------
* www.inMail.sk - Vasa emailova adresa na cely zivot ZDARMA
* Mail neobsahuje virusy. Zkontrolovane antivirusom NOD32 (www.eset.sk)
* www.SlovakNET.sk - profesionalny webhosting, domena .SK ZADARMO
* Zoner Media Explorer 5 - stiahnite si pomocnika pre digitalnu fotografiu
(zme.zoner.sk)

Odpovedá: Petr Vones

31. 10. 2003 14:41

From: "Koteles Jan" <koteles@lumen.sk>
> Real - potrebujem pracovat len s 0,01 presnostou, tak som myslel ze bude

Typ Real nemas vubec pouzivat v Delphi. Od toho jsou typy Single, Double a
Extended.

Petr Vones






----------
* www.inMail.sk - Vasa emailova adresa na cely zivot ZDARMA
* Mail neobsahuje virusy. Zkontrolovane antivirusom NOD32 (www.eset.sk)
* www.SlovakNET.sk - profesionalny webhosting, domena .SK ZADARMO
* Zoner Media Explorer 5 - stiahnite si pomocnika pre digitalnu fotografiu
(zme.zoner.sk)

Odpovedá: Ing. Jan Dubsky - Strojirna Palava

31. 10. 2003 14:47

Nicmeme, kdyz je typ Real v Delphi definovany, tak by mel pracovat
korektne. Proc by se nemel pouzivat (pokud duvod neni ten, ze nefunguje)

Honza

> Typ Real nemas vubec pouzivat v Delphi. Od toho jsou typy Single,
Double a Extended.

> Petr Vones







----------
* www.inMail.sk - Vasa emailova adresa na cely zivot ZDARMA
* Mail neobsahuje virusy. Zkontrolovane antivirusom NOD32 (www.eset.sk)
* www.SlovakNET.sk - profesionalny webhosting, domena .SK ZADARMO
* Zoner Media Explorer 5 - stiahnite si pomocnika pre digitalnu fotografiu
(zme.zoner.sk)

Odpovedá: Petr Vones

31. 10. 2003 14:47

From: "Ing. Jan Dubsky - Strojirna Palava" <dubsky@s-palava.cz>
> Nicmeme, kdyz je typ Real v Delphi definovany, tak by mel pracovat
> korektne. Proc by se nemel pouzivat (pokud duvod neni ten, ze nefunguje)

Typ Real pochazi jeste z doby stareho paskalu kde neexistoval v procesorech
FPU. Je nekompatibilini s typy dnesnich CPU takze je nutne mezi nim a nativnim
typem provadet konverze coz znacne degraduje vykon. V Delphi se mapuje do typu
Double, dle nastaveni $REALCOMPATIBILITY. To ze "nefunguje" je tvuj dojem,
protoze jsi narazil na problem presnosti pouzitim nevhodneho typu pro danou
operaci.

Petr Vones





----------
* www.inMail.sk - Vasa emailova adresa na cely zivot ZDARMA
* Mail neobsahuje virusy. Zkontrolovane antivirusom NOD32 (www.eset.sk)
* www.SlovakNET.sk - profesionalny webhosting, domena .SK ZADARMO
* Zoner Media Explorer 5 - stiahnite si pomocnika pre digitalnu fotografiu
(zme.zoner.sk)

Odpovedá: Ing. Jan Dubsky - Strojirna Palava

31. 10. 2003 14:54

Dobra, ale co kdyz mam projekt, ktery jiz obsahuje spoustu navzajem
provazanych procedur a funkci, ktere obsahuji typ real. Jak se tyto
vsechny promenne daji bez problemu hromadne prevest na vhodnejsi typ
(tedy asi na typ Double)

Honza

Typ Real pochazi jeste z doby stareho paskalu kde neexistoval v
procesorech FPU. Je nekompatibilini s typy dnesnich CPU takze je nutne
mezi nim a nativnim typem provadet konverze coz znacne degraduje vykon.
V Delphi se mapuje do typu Double, dle nastaveni $REALCOMPATIBILITY. To
ze "nefunguje" je tvuj dojem, protoze jsi narazil na problem presnosti
pouzitim nevhodneho typu pro danou operaci.

Petr Vones






----------
* www.inMail.sk - Vasa emailova adresa na cely zivot ZDARMA
* Mail neobsahuje virusy. Zkontrolovane antivirusom NOD32 (www.eset.sk)
* www.SlovakNET.sk - profesionalny webhosting, domena .SK ZADARMO
* Zoner Media Explorer 5 - stiahnite si pomocnika pre digitalnu fotografiu
(zme.zoner.sk)

Odpovedá: Slavomir Skopalik

31. 10. 2003 15:11

double neni vzdy nejvhodnejsi typ, double je typ pro UCHOVAVANI dat,
nikoliv pro samotne vypocty.
Pro vypocty je urcen typ extended, ve kterem se ty vypocty ve skutecnosti
pocitaji (i single * single se stejne spocte v FPU jako extended * extended).
Takze pro funkce a lokalni promenne doporucuji extended, pro property,
Databaze,
... typ double, nebo single podle potreby.
Pri zasazich do projektu muzes klidne predelart jen jeden unit a pokud to mas
smysluplne postaveno, tak se nic nestane (bude to fungovat).
Problem muze byt pouze pri predavani jako var.
Jinak doporucuji zalohovat a hromadny replace.

 Slavek

> Dobra, ale co kdyz mam projekt, ktery jiz obsahuje spoustu navzajem
> provazanych procedur a funkci, ktere obsahuji typ real. Jak se tyto
> vsechny promenne daji bez problemu hromadne prevest na vhodnejsi typ
> (tedy asi na typ Double)
>
> Honza
>
> Typ Real pochazi jeste z doby stareho paskalu kde neexistoval v
> procesorech FPU. Je nekompatibilini s typy dnesnich CPU takze je nutne
> mezi nim a nativnim typem provadet konverze coz znacne degraduje vykon.
> V Delphi se mapuje do typu Double, dle nastaveni $REALCOMPATIBILITY. To
> ze "nefunguje" je tvuj dojem, protoze jsi narazil na problem presnosti
> pouzitim nevhodneho typu pro danou operaci.
>
> Petr Vones
>
>
>
>
>




----------
* www.inMail.sk - Vasa emailova adresa na cely zivot ZDARMA
* Mail neobsahuje virusy. Zkontrolovane antivirusom NOD32 (www.eset.sk)
* www.SlovakNET.sk - profesionalny webhosting, domena .SK ZADARMO
* Zoner Media Explorer 5 - stiahnite si pomocnika pre digitalnu fotografiu
(zme.zoner.sk)

Odpovedá: Petr Vones

31. 10. 2003 15:17

From: "Ing. Jan Dubsky - Strojirna Palava" <dubsky@s-palava.cz>
> Dobra, ale co kdyz mam projekt, ktery jiz obsahuje spoustu navzajem
> provazanych procedur a funkci, ktere obsahuji typ real. Jak se tyto
> vsechny promenne daji bez problemu hromadne prevest na vhodnejsi typ
> (tedy asi na typ Double)

Hromadnym nahrazenim ve zdrojaku. Samozrejme ne vsude je Extended potreba, ale
to musis zvazit.

Petr Vones





----------
* www.inMail.sk - Vasa emailova adresa na cely zivot ZDARMA
* Mail neobsahuje virusy. Zkontrolovane antivirusom NOD32 (www.eset.sk)
* www.SlovakNET.sk - profesionalny webhosting, domena .SK ZADARMO
* Zoner Media Explorer 5 - stiahnite si pomocnika pre digitalnu fotografiu
(zme.zoner.sk)

Odpovedá: Ing. Jan Dubsky - Strojirna Palava

31. 10. 2003 15:18

To jsem mel prave na mysli. Pri volani se ozve procedura, ze ma jiny typ
promene, kdyz zmenim typ v procedure, tak se zase ozve nejaka jina ...
(ne vzdy, ale nekdy to dost zdrzuje, proto dik i za to upresneni, ktery
typ je pro co nejvhodnejsi). Reseni asi bude to postupne vychytat.

> Problem muze byt pouze pri predavani jako var. Jinak doporucuji
zalohovat a hromadny replace.

 Slavek






----------
* www.inMail.sk - Vasa emailova adresa na cely zivot ZDARMA
* Mail neobsahuje virusy. Zkontrolovane antivirusom NOD32 (www.eset.sk)
* www.SlovakNET.sk - profesionalny webhosting, domena .SK ZADARMO
* Zoner Media Explorer 5 - stiahnite si pomocnika pre digitalnu fotografiu
(zme.zoner.sk)